package br.com.beans;

import java.util.List;
import java.util.Set;
import java.util.TreeSet;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

import br.com.dao.ConvenioDAO;

/** Classe que representa um convenio medico */
@Entity
@Table(name="tb_convenio")
public class Convenio {

	/** Codigo do convenio */
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	@Column(nullable=false)
	private int codigo;

	/** Descricao do convenio */
	@Column(length=50,nullable=false)
	private String descricao;
	
	/** Construtor padrao */
	public Convenio() {}

	/** Construtor de copia */
	public Convenio(Convenio convenio) {
		copiar(convenio);
	}

	/** Limpa todos atributos. */
	public void limpar() {
		setCodigo(0);
		setDescricao(null);
	}

	/** Copia atributos de outro objeto.
	 *  @param obj Objeto a ser copiado */
	public void copiar(Convenio obj) {
		if (obj != null) {
			//codigo = obj.codigo;
			descricao = obj.descricao;
		} else {
			limpar();
		}
	}
	
	/** Cadastra um convenio. */
	public void cadastrar() {
		ConvenioDAO convenioDAO = new ConvenioDAO();
		FacesMessage facesMessage = null;
		
		if (convenioDAO.inserir(this)) {
			facesMessage = new FacesMessage("Convenio adicionado com sucesso.",null);  
			limpar();
		} else {
			facesMessage = new FacesMessage("Erro ao adicionar convenio.",null);  
		}
		FacesContext.getCurrentInstance().addMessage(null,facesMessage);  
	}
	
	/** Remove um convenio. */
	public void remover() {
		ConvenioDAO convenioDAO = new ConvenioDAO();
		FacesMessage facesMessage = null;

		if (convenioDAO.excluir(getCodigo())) {
			facesMessage = new FacesMessage("Convenio removido com sucesso.",null);  
		} else {
			facesMessage = new FacesMessage("Erro ao remover convenio.",null);  
		}
		limpar();
		FacesContext.getCurrentInstance().addMessage(null,facesMessage);  
	}
	
	/** Retorna lista de convenios.
	 *  @return Lista de convenios. */
	public List<Convenio> getLista() {
		ConvenioDAO convenioDAO = new ConvenioDAO();
		return convenioDAO.listar();
	}
	
	/** Retorna lista de descricoes de convenios.
	 *  @return Lista de descricoes de convenios. */
	public Set<String> getListaDescricao() {
		ConvenioDAO convenioDAO = new ConvenioDAO();
		Set<String> resultado = new TreeSet<String>();

		List<Convenio> convenioList = convenioDAO.listar();
		if (convenioList != null) {
			for (Convenio convenio : convenioList){
				resultado.add(convenio.getDescricao());
			}
		}
		return resultado;
	}
	
	
	public int getCodigo() {
		return codigo;
	}

	public void setCodigo(int codigo) {
		this.codigo = codigo;
	}

	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}
	
}
